// gamewidget.h
#ifndef GAMEWIDGET_H
#define GAMEWIDGET_H

#include <QWidget>
#include <QPainter>
#include <QKeyEvent>
#include <QTimer>
#include <QMessageBox>
#include <QRandomGenerator>
#include <QSoundEffect>

const int BLOCK_SIZE = 20;
const int WIDTH = 600;
const int HEIGHT = 450;
const int MAX_LENGTH = 500;

enum Direction { STOP, LEFT, RIGHT, UP, DOWN };

// 食物类型枚举
enum FoodType {
    NORMAL,    // 普通食物（+10分）
    FAST,      // 加速食物（速度+20%）
    SLOW,      // 减速食物（速度-20%）
    DOUBLE     // 双倍得分食物（+20分）
};

class GameWidget : public QWidget {
    Q_OBJECT
public:
    explicit GameWidget(QWidget *parent = nullptr);

protected:
    void paintEvent(QPaintEvent *event) override;
    void keyPressEvent(QKeyEvent *event) override;

private slots:
    void gameLoop();

private:
    struct Snake {
        int x[MAX_LENGTH];
        int y[MAX_LENGTH];
        int length;
        Direction dir;
    } snake;

    int foodX, foodY;
    int score;
    int gameSpeed;  // 当前游戏速度（毫秒）
    QTimer *timer;
    FoodType currentFoodType;  // 当前食物类型

    void initGame();
    void moveSnake();
    void checkCollision();
    void spawnFood();
    void applyFoodEffect(FoodType type);
    QColor getFoodColor(FoodType type);
};

#endif // GAMEWIDGET_H
